//
//  CSBaseView.h
//  市场监管通
//
//  Created by 网新中研 on 16/4/8.
//  Copyright © 2016年 centralsoft. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "KLCPopup.h"

@class CSPageElementModel;
@class CSSelectableModel;

typedef void(^MultitpleSelectedBlock)(NSString *selectedNamesString, NSString *selectedCodesString);

typedef void(^CSSelectBlock)(NSInteger section, NSInteger index, NSString *selectString);

typedef void(^CSSelectBlock2)(NSInteger section, NSInteger index, CSSelectableModel *model);

/**
 *  中研控件视图
 */
@interface CSBaseView : UIView

#pragma mark --- QueryView兼容项

/**
 *  是否为必要项
 */
@property (nonatomic, assign) CGFloat leftMargin;

/**
 *  是否为必要项
 */
@property (nonatomic, assign) CGFloat rightMargin;

/**
 * 标题标签
 */
@property (nonatomic, strong) NSString *placeHolder;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *keyCode;
@property (nonatomic, assign, readonly) NSInteger viewType;


#pragma mark --- Property

/**
 *  是否为必要项
 */
@property (nonatomic, assign) BOOL isNecessary;

/**
 *  描述栏
 */
@property (nonatomic, strong) UILabel *descriptionLabel;

/**
 *  值
 */
@property (nonatomic, strong) NSString *value;

/**
 * 标题标签
 */
@property (nonatomic, strong) UILabel *titleLabel;

/**
 * 向下的箭头
 */
@property (nonatomic, strong) UIImageView *downArrowImageView;

#pragma mark --- 关键字变色处理

/**
 * 设置应用制定关键字变色
 */
+(void)setApplicationColoredString:(NSString *)keyString color:(UIColor *)color;

/**
 * 具体文字改变颜色的处理
 */
+(void)colorApplicationColoredString:(NSMutableAttributedString *)attributedString;

/**
 * 清除应用制定关键字的变色处理
 */
+(void)clearApplicationColoredKey:(NSString *)keyString;

#pragma mark --- Layout

/**
 * 添加分割线
 */
-(CGFloat)addSeperatorLine:(UIView *)superView primaryY:(CGFloat)primaryY;

/**
 *  所有CSBaseView类型视图，按该方法自上到下顺序布局到父视图（superView）上
 *
 *  @param superView 父视图
 *
 *  @return 添加该视图后的Y坐标高度
 */
-(CGFloat)layoutView:(UIView *)superView primaryY:(CGFloat)primaryY;


/**
 *  主要用于界面刷新时替代layoutView方法
 *  由于layoutView会重新布局该视图所有的子视图对象，在刷新时，有时候仅仅是该修改项该视图的位置，不需要重新布局其子视图而造成资源浪费。
 *  当然，有事视图在界面刷新的时候会需要刷新其子视图，所以有些子类会重载它这个方法，判断是否需要刷新子视图并做相应处理。
 *
 *  @param superView 父视图
 *
 *  @return 重新布局后该视图后的Y坐标高度
 */
-(CGFloat)layoutViewForRefresh:(UIView *)superView primaryY:(CGFloat)primaryY;

/**
 * 是否必要重新布局该对象
 * 对应layoutViewForRefresh的属性，在layoutViewForRefresh方法中有些只需要改变该视图相对于父视图的位置，有些则需要重新布局其子视图。
 * YES 重新布局， NO 不重新布局
 *
 */
@property (nonatomic, assign) BOOL isRefreshRequired;

/**
 * 是否强制忽略refreshSelfAndAdjustContext调用处罚的刷新操作
 */
@property (nonatomic, assign) BOOL isRefreshIgnored;

/**
 * 刷新自己并调整上下文视图的位置关系
 * 按顺序刷新父视图中所有类型为CSBaseView的子视图
 * 为提升速度，刷新方法调用layoutViewForRefresh，对没有必要重新布局的子视图，只修改它的位置
 */
-(void)refreshSelfAndAdjustContext;

#pragma mark --- Value process

/**
 *  值重置
 */
-(void)reset;


#pragma mark --- Pop show

/**
 * 弹出控制对象
 */
@property (nonatomic, strong) KLCPopup *superKLCPopup;

/**
 * 弹出显示
 */
-(void)popShow:(UIViewController *)superViewController;

/**
 * 弹出显示
 */
-(void)popShow;

/**
 * 从底部向上弹出显示
 */
-(void)bottomShow;


/**
 * 从顶部向下弹出显示
 */
-(void)topShow;

@property (nonatomic, strong) NSString *seperateKeyString;

/**
 * json对应的字段名称
 */
@property (nonatomic, strong) NSString *jsonField;

/**
 * 是否在开发模式
 */
@property (nonatomic, assign) BOOL isDevelopmentMode;

/**
 * 是否在开发模式
 */
@property (nonatomic, assign) CSPageElementModel *pageElementModel;



-(BOOL)isCornerRadusRequired;

#pragma mark --- 初始化资源

+(void)loadPreloadImage:(UIImage *)image;

/**
 * 预加载图片
 */
+(UIImage*)preloadImage;

/**
 * 隐藏键盘
 */
-(void)hideKeyboard;

-(void)showPage;


@end
